/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.sgs.mb;

import br.com.sgs.auxiliar.AlunoAux;
import br.com.sgs.auxiliar.EnderecoAux;
import br.com.sgs.bundle.MessageBundleLoader;
import br.com.sgs.entity.Aluno;
import br.com.sgs.fachada.*;
import br.com.sgs.util.DataValue;
import java.io.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

        
             
        
                
/**
 *
 * @author Eric
 */
@ManagedBean(name="alunoMB")
@ViewScoped
public class AlunoMB implements Serializable {
    
    
    private List<Aluno> lsaluno = new ArrayList<Aluno>();
    private List<String> lsstatus = new ArrayList<String>();
       
    //instituicao selecionada
    private Aluno alunoselecionado;
    
    //parametro de busca
    private String busca;
    private String senha;
    private String confirmasenha;
    private String senhaatual;
 
    //campos do visualizar
    private String strnome;
    private String stremail;
    private String strrgm;
    private String strrg;
    private String strcpf;
    private String strlogin;
    private String strtelefone;
    private String strcelular;
    private String strinstituicao;
    private Date strdtcriacao;
    
    private String strpais;
    private String strestado;
    private String strcidade;
    private String strrua;
    private String strnumero;
    private String strcep;
    private String strstatus;
    
    
    
    /**
     * Creates a new instance of InstituicaoNew
     */
    public AlunoMB() {
    }
    
    @PostConstruct
    public void init() {
        try {

            AlunoIFachada ifach = new AlunoFachada();

            for (DataValue lsd : AlunoAux.getStatusLista()) {
                this.getLsstatus().add(lsd.getValue());
            }

            lsaluno = ifach.findAlunoByAll("", "", "", "", "", null, null, lsstatus);

        } catch (Exception e) {
            System.err.println("Erro no init do alunoMB");
        }
    }
        
    public void buscar() {
        try {
            
            AlunoIFachada ifach = new AlunoFachada();
            lsaluno = ifach.findAlunoByAll(busca, "", "", "", "", null, null, lsstatus);

            
        } catch (Exception e) {
            System.err.println("Erron no método buscar");
            e.printStackTrace();
        }
    }
    
    public void visualizar(Aluno a) {
        try {

            setStrinstituicao(a.getInstituicao().getNome());
            strnome = a.getNome();
            strlogin = a.getLogin();
            stremail = a.getEmail();
            strrgm = a.getRgm();
            strrg = a.getRg();
            strcpf = a.getCpf();
            setStrstatus(MessageBundleLoader.getMessage(AlunoAux.getStatusLabel(a.getStatus())));
            setStrdtcriacao(a.getDtcriacao());
            setStrtelefone(a.getTelefone());
            strcelular = a.getCelular();
            setStrnumero(a.getEndereco().getNumero());
            setStrrua(a.getEndereco().getRua());            
            setStrcidade(a.getEndereco().getCidade());
            setStrestado(a.getEndereco().getEstado());
            setStrpais(a.getEndereco().getPais());
            setStrcep(a.getEndereco().getCep());  
            


        } catch (Exception e) {
            System.err.println("Erro no visualizar");
        }
    }
    
    public void excluir() {
        try {

            IFachada ifach = new Fachada();

            Aluno a = alunoselecionado;

            a.setStatus(AlunoAux.EXCLUIDO);
            a.getEndereco().setStatus(EnderecoAux.EXCLUIDO);
            ifach.alterar(a);

            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, MessageBundleLoader.getMessage("msgExcluidoSucesso"), ""));
            atualizarTabela();

        } catch (Exception e) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL, MessageBundleLoader.getMessage("msgexclusaoErro"), ""));
        }

    }

    public String editar() {
        try {
           return "ALUNOEDIT";
        } catch (Exception e) {
           return null;
        }
    }
    
    public void atualizarTabela() {
        try {

           AlunoIFachada ifach = new AlunoFachada();
            lsaluno = ifach.findAlunoByAll("", "", "", "", "", null, null, lsstatus);

        } catch (Exception e) {
            System.err.println("Erro no metodo atualizarTabela");
        }
    }
    
//    public void gerarPdf() throws FileNotFoundException, DocumentException, IOException {
//        Document doc = null;
//        OutputStream os = null;
//
//        try {
//
//            doc = new Document(PageSize.A4, 72, 72, 72, 72);
//
//            os = new FileOutputStream("out.pdf");
//            
//            PdfWriter.getInstance(doc, os);
//
//            doc.open();
//
//            Paragraph p1 = new Paragraph("Meu primeiro arquivo PDF!");
//            doc.add(p1);
//            
//            Paragraph p2 = new Paragraph("Estou utilizando a classe Paragraph para criar um bloco de texto na geração do meu primeiro arquivo PDF.");
//            doc.add(p2);
//            
//            PdfPTable table = new PdfPTable(3);
//
//            PdfPCell header = new PdfPCell(new Paragraph("Algumas Palavaras Reservadas do Java"));
//
//            header.setColspan(3);
//            table.addCell(header);
//           
//            table.addCell(alunoselecionado.getNome());
//
//            table.addCell("extends");
//
//            table.addCell("import");
//
//            table.addCell("while");
//
//            table.addCell("if");
//
//            table.addCell("switch");
//
//            doc.add(table);
//
//
//        } finally {
//
//            if (doc != null) {
//
//                //fechamento do documento
//
//                doc.close();
//
//            }
//
//            if (os != null) {
//
//                //fechamento da stream de saída
//
//                os.close();
//
//            }
//
//        }
//
//    }
    
    public void selecionarRegistro(Aluno a) {
        try {

            alunoselecionado = a;

        } catch (Exception e) {
            System.err.println("Erro no metodo selecionarRegistro");
        }

    }
    
    public void alterarSenha() {
        try {
            
            if(senha.equals(confirmasenha)){
                
                AlunoIFachada ifach = new AlunoFachada();
                alunoselecionado.setSenha(senha);
                
                ifach.alterar(alunoselecionado);
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, MessageBundleLoader.getMessage("msgSenhaAlterada"), ""));
                
            } else {
                 FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, MessageBundleLoader.getMessage("msgSenhaNaoConfere"), ""));
            }
        } catch (Exception e) {
            System.err.println("Erro no alterar senha");
            e.printStackTrace();
        }
    }
    
    public String strStatusLabel(int st) {
        return MessageBundleLoader.getMessage(AlunoAux.getStatusLabel(st));
    }

    /**
     * @return the lsaluno
     */
    public List<Aluno> getLsaluno() {
        return lsaluno;
    }

    /**
     * @param lsaluno the lsaluno to set
     */
    public void setLsaluno(List<Aluno> lsaluno) {
        this.lsaluno = lsaluno;
    }

    /**
     * @return the lsstatus
     */
    public List<String> getLsstatus() {
        return lsstatus;
    }

    /**
     * @param lsstatus the lsstatus to set
     */
    public void setLsstatus(List<String> lsstatus) {
        this.lsstatus = lsstatus;
    }

    /**
     * @return the alunoselecionado
     */
    public Aluno getAlunoselecionado() {
        return alunoselecionado;
    }

    /**
     * @param alunoselecionado the alunoselecionado to set
     */
    public void setAlunoselecionado(Aluno alunoselecionado) {
        this.alunoselecionado = alunoselecionado;
    }

    /**
     * @return the busca
     */
    public String getBusca() {
        return busca;
    }

    /**
     * @param busca the busca to set
     */
    public void setBusca(String busca) {
        this.busca = busca;
    }

    /**
     * @return the strnome
     */
    public String getStrnome() {
        return strnome;
    }

    /**
     * @param strnome the strnome to set
     */
    public void setStrnome(String strnome) {
        this.strnome = strnome;
    }

    /**
     * @return the stremail
     */
    public String getStremail() {
        return stremail;
    }

    /**
     * @param stremail the stremail to set
     */
    public void setStremail(String stremail) {
        this.stremail = stremail;
    }

    /**
     * @return the strrgm
     */
    public String getStrrgm() {
        return strrgm;
    }

    /**
     * @param strrgm the strrgm to set
     */
    public void setStrrgm(String strrgm) {
        this.strrgm = strrgm;
    }

    /**
     * @return the strrg
     */
    public String getStrrg() {
        return strrg;
    }

    /**
     * @param strrg the strrg to set
     */
    public void setStrrg(String strrg) {
        this.strrg = strrg;
    }

    /**
     * @return the strcpf
     */
    public String getStrcpf() {
        return strcpf;
    }

    /**
     * @param strcpf the strcpf to set
     */
    public void setStrcpf(String strcpf) {
        this.strcpf = strcpf;
    }

    /**
     * @return the strlogin
     */
    public String getStrlogin() {
        return strlogin;
    }

    /**
     * @param strlogin the strlogin to set
     */
    public void setStrlogin(String strlogin) {
        this.strlogin = strlogin;
    }

    /**
     * @return the strtelefone
     */
    public String getStrtelefone() {
        return strtelefone;
    }

    /**
     * @param strtelefone the strtelefone to set
     */
    public void setStrtelefone(String strtelefone) {
        this.strtelefone = strtelefone;
    }

    /**
     * @return the strcelular
     */
    public String getStrcelular() {
        return strcelular;
    }

    /**
     * @param strcelular the strcelular to set
     */
    public void setStrcelular(String strcelular) {
        this.strcelular = strcelular;
    }

    /**
     * @return the strinstituicao
     */
    public String getStrinstituicao() {
        return strinstituicao;
    }

    /**
     * @param strinstituicao the strinstituicao to set
     */
    public void setStrinstituicao(String strinstituicao) {
        this.strinstituicao = strinstituicao;
    }

    /**
     * @return the strdtcriacao
     */
    public Date getStrdtcriacao() {
        return strdtcriacao;
    }

    /**
     * @param strdtcriacao the strdtcriacao to set
     */
    public void setStrdtcriacao(Date strdtcriacao) {
        this.strdtcriacao = strdtcriacao;
    }

    /**
     * @return the strpais
     */
    public String getStrpais() {
        return strpais;
    }

    /**
     * @param strpais the strpais to set
     */
    public void setStrpais(String strpais) {
        this.strpais = strpais;
    }

    /**
     * @return the strestado
     */
    public String getStrestado() {
        return strestado;
    }

    /**
     * @param strestado the strestado to set
     */
    public void setStrestado(String strestado) {
        this.strestado = strestado;
    }

    /**
     * @return the strcidade
     */
    public String getStrcidade() {
        return strcidade;
    }

    /**
     * @param strcidade the strcidade to set
     */
    public void setStrcidade(String strcidade) {
        this.strcidade = strcidade;
    }

    /**
     * @return the strrua
     */
    public String getStrrua() {
        return strrua;
    }

    /**
     * @param strrua the strrua to set
     */
    public void setStrrua(String strrua) {
        this.strrua = strrua;
    }

    /**
     * @return the strnumero
     */
    public String getStrnumero() {
        return strnumero;
    }

    /**
     * @param strnumero the strnumero to set
     */
    public void setStrnumero(String strnumero) {
        this.strnumero = strnumero;
    }

    /**
     * @return the strcep
     */
    public String getStrcep() {
        return strcep;
    }

    /**
     * @param strcep the strcep to set
     */
    public void setStrcep(String strcep) {
        this.strcep = strcep;
    }

    /**
     * @return the strstatus
     */
    public String getStrstatus() {
        return strstatus;
    }

    /**
     * @param strstatus the strstatus to set
     */
    public void setStrstatus(String strstatus) {
        this.strstatus = strstatus;
    }

    /**
     * @return the senhaatual
     */
    public String getSenhaatual() {
        return senhaatual;
    }

    /**
     * @param senhaatual the senhaatual to set
     */
    public void setSenhaatual(String senhaatual) {
        this.senhaatual = senhaatual;
    }

    /**
     * @return the senha
     */
    public String getSenha() {
        return senha;
    }

    /**
     * @param senha the senha to set
     */
    public void setSenha(String senha) {
        this.senha = senha;
    }

    /**
     * @return the confirmasenha
     */
    public String getConfirmasenha() {
        return confirmasenha;
    }

    /**
     * @param confirmasenha the confirmasenha to set
     */
    public void setConfirmasenha(String confirmasenha) {
        this.confirmasenha = confirmasenha;
    }
            
   
}
